package com.losrebellos.project.application
{
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.events.Event;
	import flash.geom.Rectangle;

	/**
	 * @author Los Rebellos (Benoit Vinay)
	 */
	public class BaseApplication extends AbstractApplication
	{
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		// CONSTRUCTOR
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		public function BaseApplication()
		{
			super();
			
			this.addEventListener(Event.ADDED_TO_STAGE, addedToStageHandler);
			this.addEventListener(Event.REMOVED_FROM_STAGE, removedFromStageHandler);
		}
		
		
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		// STAGE
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		override protected function createStageOptions():void
		{
			stage.align = StageAlign.TOP_LEFT;
			stage.scaleMode = StageScaleMode.NO_SCALE;
			
			stage.addEventListener(Event.RESIZE, onResize, false, 0, true);
			stage.addEventListener(Event.RENDER, onRender, false, 0, true);
		}
		
		
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		// START APPLICATION
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		protected function addedToStageHandler(e:Event):void
		{
			this.removeEventListener(Event.ADDED_TO_STAGE, addedToStageHandler);
			
			createStageOptions();
			createStageContent();
			addStageContent();
			onResize();
			enable();
		}
		
		
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		// STOP APPLICATION
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		protected function removedFromStageHandler(e:Event):void
		{
			this.removeEventListener(Event.REMOVED_FROM_STAGE, removedFromStageHandler);
			
			disable();
			dispose(e);
		}
		
		
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		// INVALIDATE
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		override protected function onResize(e:Event = null):void
		{
			resize(new Rectangle(0, 0, stage.stageWidth, stage.stageHeight));
		}
		override protected function onRender(e:Event = null):void
		{
			redraw();
		}
	}
}